// BPMN设计器直接汉化工具 - 强制DOM操作方式

// 中文翻译映射
const bpmnTranslations = {
  // 调色板元素
  'Start Event': '开始事件',
  'End Event': '结束事件',
  'Task': '任务',
  'User Task': '用户任务',
  'Service Task': '服务任务',
  'Script Task': '脚本任务',
  'Manual Task': '手工任务',
  'Business Rule Task': '业务规则任务',
  'Send Task': '发送任务',
  'Receive Task': '接收任务',
  'Exclusive Gateway': '排他网关',
  'Parallel Gateway': '并行网关',
  'Inclusive Gateway': '包容网关',
  'Event-based Gateway': '事件网关',
  'Complex Gateway': '复杂网关',
  'Sub Process': '子流程',
  'Call Activity': '调用活动',
  'Data Object': '数据对象',
  'Data Store': '数据存储',
  'Text Annotation': '文本注释',
  'Group': '组',
  'Boundary Event': '边界事件',
  'Intermediate Event': '中间事件',
  'Message': '消息',
  'Timer': '定时器',
  'Error': '错误',
  'Escalation': '升级',
  'Cancel': '取消',
  'Compensation': '补偿',
  'Conditional': '条件',
  'Link': '链接',
  'Signal': '信号',
  'Multiple': '多重',
  'Parallel Multiple': '并行多重',
  'Terminate': '终止',

  // 属性面板分组
  'General': '常规',
  'Details': '详细信息',
  'Documentation': '文档',
  'Extension Properties': '扩展属性',
  'Form Fields': '表单字段',
  'Listeners': '监听器',
  'Multi Instance': '多实例',
  'Asynchronous Continuations': '异步延续',
  'Job Configuration': '作业配置',
  'Input/Output': '输入/输出',
  'Execution': '执行',
  'Task Listener': '任务监听器',
  'Execution Listener': '执行监听器',

  // 字段标签
  'ID': '标识符',
  'Name': '名称',
  'Assignee': '指派人',
  'Candidate Users': '候选用户',
  'Candidate Groups': '候选组',
  'Due Date': '到期日期',
  'Follow Up Date': '跟进日期',
  'Priority': '优先级',
  'Form Key': '表单键',
  'Form Data': '表单数据',
  'Form Type': '表单类型',
  'Form Field': '表单字段',
  'Field ID': '字段标识符',
  'Field Label': '字段标签',
  'Field Type': '字段类型',
  'Default Value': '默认值',
  'Validation': '验证',
  'Properties': '属性',
  'Value': '值',
  'Type': '类型',
  'Required': '必需',
  'Readable': '可读',
  'Writable': '可写',
  'Variable Name': '变量名',
  'Variable Type': '变量类型',
  'Variable Value': '变量值',
  'Script Format': '脚本格式',
  'Script Type': '脚本类型',
  'Script': '脚本',
  'Result Variable': '结果变量',
  'Resource': '资源',
  'Topic': '主题',
  'Message Name': '消息名称',
  'Message Payload': '消息载荷',
  'Correlation Key': '关联键',
  'Time Date': '时间日期',
  'Time Duration': '时间持续时间',
  'Time Cycle': '时间周期',
  'Error Code': '错误代码',
  'Error Message': '错误消息',
  'Escalation Code': '升级代码',
  'Condition': '条件',
  'Condition Expression': '条件表达式',
  'Signal Name': '信号名称',
  'Signal Scope': '信号范围',
  'Link Name': '链接名称',
  'Target': '目标',
  'Source': '源',
  'Compensation Activity': '补偿活动',
  'Wait for Completion': '等待完成',
  'Activity Ref': '活动引用',
  'Collection': '集合',
  'Element Variable': '元素变量',
  'Completion Condition': '完成条件',
  'Sequential': '顺序',
  'Parallel': '并行',
  'Loop Cardinality': '循环基数',
  'Async Before': '异步前',
  'Async After': '异步后',
  'Exclusive': '排他',
  'Retry Time Cycle': '重试时间周期',
  'Job Priority': '作业优先级',
  'Job Type': '作业类型',
  'Input Parameter': '输入参数',
  'Output Parameter': '输出参数',
  'Local Variable': '本地变量',
  'Input Mapping': '输入映射',
  'Output Mapping': '输出映射',

  // 按钮和操作
  'Add': '添加',
  'Remove': '移除',
  'Edit': '编辑',
  'Delete': '删除',
  'Save': '保存',
  'Cancel': '取消',
  'OK': '确定',
  'Apply': '应用',
  'Reset': '重置',
  'Clear': '清除',
  'Select': '选择',
  'Browse': '浏览',
  'Upload': '上传',
  'Download': '下载',
  'Export': '导出',
  'Import': '导入',
  'Refresh': '刷新',
  'Search': '搜索',
  'Filter': '过滤',
  'Sort': '排序',
  'Group': '分组',
  'Ungroup': '取消分组',
  'Copy': '复制',
  'Paste': '粘贴',
  'Cut': '剪切',
  'Undo': '撤销',
  'Redo': '重做',
  'Zoom In': '放大',
  'Zoom Out': '缩小',
  'Reset Zoom': '重置缩放',
  'Fit Viewport': '适应视口',
  'Full Screen': '全屏',
  'Exit Full Screen': '退出全屏',
  'Print': '打印',
  'Preview': '预览',
  'Help': '帮助',
  'About': '关于',
  'Settings': '设置',
  'Preferences': '首选项',
  'Configuration': '配置',
  'Customize': '自定义',
  'Default': '默认',
  'Advanced': '高级',
  'Basic': '基础',
  'Simple': '简单',
  'Complex': '复杂',
  'Quick': '快速',
  'Manual': '手动',
  'Automatic': '自动',
  'Semi-automatic': '半自动',

  // 工具栏
  'Toggle Palette': '切换调色板',
  'New': '新建',
  'Open': '打开',
  'Export XML': '导出XML',
  'Export SVG': '导出SVG',

  // 上下文菜单
  'Append Start Event': '添加开始事件',
  'Append End Event': '添加结束事件',
  'Append Task': '添加任务',
  'Append Gateway': '添加网关',
  'Append Sub Process': '添加子流程',
  'Append Boundary Event': '添加边界事件',
  'Append Intermediate Event': '添加中间事件',
  'Append Text Annotation': '添加文本注释',
  'Append Data Object': '添加数据对象',
  'Append Data Store': '添加数据存储',
  'Append Group': '添加组',
  'Connect': '连接',
  'Disconnect': '断开连接',
  'Replace': '替换',
  'Move': '移动',
  'Resize': '调整大小',
  'Bring to Front': '置于顶层',
  'Send to Back': '置于底层',
  'Bring Forward': '上移一层',
  'Send Backward': '下移一层',

  // 验证消息
  'Element must have an ID': '元素必须有标识符',
  'Element must have a name': '元素必须有名称',
  'Invalid ID format': '无效的标识符格式',
  'ID already exists': '标识符已存在',
  'Invalid condition expression': '无效的条件表达式',
  'Invalid script format': '无效的脚本格式',
  'Invalid date format': '无效的日期格式',
  'Invalid number format': '无效的数字格式',
  'Required field is empty': '必填字段为空',
  'Invalid email format': '无效的邮箱格式',
  'Invalid URL format': '无效的URL格式',

  // 提示信息
  'Select an element to edit properties': '选择一个元素来编辑属性',
  'Click and drag to create connection': '点击并拖拽创建连接',
  'Double-click to edit element name': '双击编辑元素名称',
  'Right-click for context menu': '右键显示上下文菜单',
  'Use keyboard shortcuts for quick access': '使用键盘快捷键快速访问',
  'Save your work regularly': '定期保存您的工作',
  'Export to share with others': '导出以与他人分享',
  'Import existing BPMN files': '导入现有的BPMN文件',

  // 状态信息
  'Ready': '就绪',
  'Loading': '加载中',
  'Saving': '保存中',
  'Exporting': '导出中',
  'Importing': '导入中',
  'Success': '成功',
  'Warning': '警告',
  'Info': '信息',

  // 对话框标题
  'Properties Panel': '属性面板',
  'BPMN Designer': 'BPMN设计器',
  'Process Designer': '流程设计器',
  'Workflow Designer': '工作流设计器',
  'Save Diagram': '保存流程图',
  'Load Diagram': '加载流程图',
  'Export Diagram': '导出流程图',
  'Import Diagram': '导入流程图',
  'Diagram Settings': '图表设置',
  'Keyboard Shortcuts': '键盘快捷键',
  'User Guide': '用户指南',
  'Support': '支持',
  'Feedback': '反馈',
  'Report Issue': '报告问题',
  'Check for Updates': '检查更新',
  'Version Info': '版本信息'
}

// 汉化单个元素
function localizeElement(element) {
  if (!element || !element.nodeType) return

  try {
    // 汉化title属性
    if (element.hasAttribute && element.hasAttribute('title')) {
      const title = element.getAttribute('title')
      if (bpmnTranslations[title]) {
        element.setAttribute('title', bpmnTranslations[title])
        console.log(`汉化title: "${title}" -> "${bpmnTranslations[title]}"`)
      }
    }

    // 汉化文本内容
    if (element.textContent) {
      const text = element.textContent.trim()
      if (text && bpmnTranslations[text] && text.length < 50) {
        element.textContent = bpmnTranslations[text]
        console.log(`汉化文本: "${text}" -> "${bpmnTranslations[text]}"`)
      }
    }

    // 汉化placeholder属性
    if (element.hasAttribute && element.hasAttribute('placeholder')) {
      const placeholder = element.getAttribute('placeholder')
      if (bpmnTranslations[placeholder]) {
        element.setAttribute('placeholder', bpmnTranslations[placeholder])
        console.log(`汉化placeholder: "${placeholder}" -> "${bpmnTranslations[placeholder]}"`)
      }
    }

    // 汉化value属性
    if (element.hasAttribute && element.hasAttribute('value')) {
      const value = element.getAttribute('value')
      if (bpmnTranslations[value]) {
        element.setAttribute('value', bpmnTranslations[value])
        console.log(`汉化value: "${value}" -> "${bpmnTranslations[value]}"`)
      }
    }

    // 汉化alt属性
    if (element.hasAttribute && element.hasAttribute('alt')) {
      const alt = element.getAttribute('alt')
      if (bpmnTranslations[alt]) {
        element.setAttribute('alt', bpmnTranslations[alt])
        console.log(`汉化alt: "${alt}" -> "${bpmnTranslations[alt]}"`)
      }
    }

    // 汉化aria-label属性
    if (element.hasAttribute && element.hasAttribute('aria-label')) {
      const ariaLabel = element.getAttribute('aria-label')
      if (bpmnTranslations[ariaLabel]) {
        element.setAttribute('aria-label', bpmnTranslations[ariaLabel])
        console.log(`汉化aria-label: "${ariaLabel}" -> "${bpmnTranslations[ariaLabel]}"`)
      }
    }

  } catch (error) {
    console.warn('汉化元素时出错:', error)
  }
}

// 汉化所有BPMN相关元素
function localizeAllBpmnElements() {
  console.log('开始汉化所有BPMN元素...')

  // 汉化调色板
  const palette = document.querySelector('.djs-palette')
  if (palette) {
    const entries = palette.querySelectorAll('.entry')
    console.log(`找到 ${entries.length} 个调色板条目`)
    entries.forEach(localizeElement)
  }

  // 汉化属性面板
  const propertiesPanel = document.querySelector('.bpp-properties-panel')
  if (propertiesPanel) {
    console.log('找到属性面板，开始汉化...')
    const allElements = propertiesPanel.querySelectorAll('*')
    allElements.forEach(localizeElement)
  }

  // 汉化工具栏
  const toolbar = document.querySelector('.djs-palette-toggle, .bpp-toolbar')
  if (toolbar) {
    const buttons = toolbar.querySelectorAll('button, .entry')
    buttons.forEach(localizeElement)
  }

  // 汉化所有BPMN相关元素
  const bpmnElements = document.querySelectorAll('[class*="bpmn"], [class*="djs"], [class*="bpp"]')
  bpmnElements.forEach(localizeElement)

  // 汉化画布中的元素
  const canvasElements = document.querySelectorAll('.djs-element')
  canvasElements.forEach(localizeElement)

  console.log('BPMN元素汉化完成')
}

// 创建MutationObserver监听DOM变化
function createBpmnObserver() {
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (mutation.type === 'childList') {
        mutation.addedNodes.forEach((node) => {
          if (node.nodeType === Node.ELEMENT_NODE) {
            localizeElement(node)
            // 递归处理子元素
            const children = node.querySelectorAll && node.querySelectorAll('*')
            if (children) {
              children.forEach(localizeElement)
            }
          }
        })
      }
    })
  })

  return observer
}

// 启动BPMN汉化系统
function startBpmnI18n() {
  console.log('启动BPMN汉化系统...')

  // 创建观察者
  const observer = createBpmnObserver()

  // 开始观察
  observer.observe(document.body, {
    childList: true,
    subtree: true
  })

  // 立即汉化现有元素
  setTimeout(() => {
    localizeAllBpmnElements()
  }, 1000)

  // 定期检查并汉化新出现的元素
  const interval = setInterval(() => {
    localizeAllBpmnElements()
  }, 3000)

  // 30秒后停止定期检查
  setTimeout(() => {
    clearInterval(interval)
    console.log('定期汉化检查结束')
  }, 30000)

  console.log('BPMN汉化系统已启动')
}

// 导出函数
window.startBpmnI18n = startBpmnI18n
window.localizeAllBpmnElements = localizeAllBpmnElements
window.bpmnTranslations = bpmnTranslations

// 自动启动
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', startBpmnI18n)
} else {
  startBpmnI18n()
}
